

package DAO;
import java.sql.*;
import java.util.ArrayList;
import bean.Servicio;
import views.*;



public class SQLServerDAOServicio implements DAOServicio {
    
    public static final int idcontxserv=1;
    
    
    @Override
    public ArrayList<Servicio> queryAll() {
            ArrayList <Servicio> servicioList = new ArrayList<Servicio>();

            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
    try {
            //1. Se registra el driver de la BD
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
           // Driver myDriver = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM G04_SERVICIO");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                int id = rs.getInt("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float preciobase = rs.getFloat("PRECIO_BASE"); 
                String unidadcobro = rs.getString("UNIDAD_COBRO");
               
               
                Servicio s = new Servicio(id,descripcion,preciobase,unidadcobro);
                servicioList.add(s);
            }               
        } catch (ClassNotFoundException | SQLException ex) {
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){}  
        } 
    
   return servicioList;   
}

    @Override
    public int insert(Servicio s) {
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
          // Driver myDriver = new microsoft.sqlserver.jdbc.SQLServerDriver();
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = null;
              SQLString =
                    "INSERT INTO G04_SERVICIO(idservicio,descripcion,"
                    + "precio_base,unidad_cobro) "
                    + "VALUES(?,?,?,?)";
                pstmt = conn.prepareStatement(SQLString);
                pstmt.setInt(1,s.getId());
                pstmt.setString(2, s.getDescripcion());
                pstmt.setString(3, String.valueOf(s.getPreciobase()));
                pstmt.setString(4, s.getUnidadcobro());
                
                                
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){}  
        } 
        return result;
    }

    @Override
    public int update(Servicio s) {
   int result=0;
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        String cadI,cadB,cadD,cadC = null;
        
        cadI=Integer.toString(s.getId());
        cadB=Float.toString(s.getPreciobase());
        PanelServicios ps=new PanelServicios();
        
        if (ps.variable==1){
            cadC="D";}
        else if (ps.variable==0) cadC="S";
            cadD=s.getDescripcion();
            try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                                   "databaseName=inf282;user=inf282;password=inf282db;";
            con = DriverManager.getConnection(url);
            String SQLString = null;
            SQLString ="UPDATE G04_SERVICIO SET IDSERVICIO ="+cadI+",DESCRIPCION ='"+cadD+
                       "',PRECIO_BASE ="+cadB+",UNIDAD_COBRO ='"+cadC+"' WHERE IDSERVICIO ="+cadI+"";
            
            pstmt = con.prepareStatement(SQLString);
            result =  pstmt.executeUpdate();
            
            //4. Se evalúan los resultados
            if (result == 0){
               // throw new Exception();
            }   
        }catch (Exception ex) {
            //ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
      return result;
    
    }
    

    @Override
    public int delete(String idServicio) {
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //1. Se registra el driver de la BD
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //2. Se abre la conexión
            String connectionUrl = 
                    "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            String SQLString = 
                    "DELETE FROM G04_SERVICIO WHERE IDSERVICIO = "+idServicio+"";                
            pstmt = conn.prepareStatement(SQLString);                    
            result =  pstmt.executeUpdate();            
            //4. Se evalúan los resultados
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){}  
        } 
        return result;     
    }
    
     @Override
    public Servicio queryByIdS(String id) {
       Servicio s= new Servicio();        
        int result =0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                                   "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            String SQLString = null;
            SQLString ="SELECT * FROM G04_SERVICIO WHERE IDSERVICIO = "+id+"";
            pstmt = conn.prepareStatement(SQLString);      
            rs =  pstmt.executeQuery();
            
            while (rs.next()){
                int idserv = rs.getInt("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                s.setId(idserv);
                s.setDescripcion(descripcion);
                s.setPreciobase(pbase);
                s.setUnidadcobro(unidad);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
        return s;
    }

    @Override
    public ArrayList<Servicio> queryByNS(String cad) {
         ArrayList <Servicio> servList = new ArrayList<Servicio>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
            try {
            //1. Se registra el driver de la BD
            //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Driver myDriver = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
            //2. Se abre la conexión
            String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                    "databaseName=inf282;user=inf282;password=inf282db;";
            conn = DriverManager.getConnection(connectionUrl);
            //3. Se ejecuta la sentencia SQL
            pstmt = conn.prepareStatement("SELECT * FROM G04_SERVICIO WHERE DESCRIPCION LIKE '%"+cad+"%'");
            rs =  pstmt.executeQuery();
            
            //4. Se evalúan los resultados
            while (rs.next()){
                int idserv = rs.getInt("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                Servicio s = new Servicio(idserv,descripcion,pbase,unidad);
                servList.add(s);
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        } 
            return servList;        
    }

    @Override
    public int insertServxCont(int idServ, int idCont) {
        int result=0;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
         
            String connectionUrl =  "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+
                                    "databaseName=inf282;user=inf282;password=inf282db;";
            
            conn = DriverManager.getConnection(connectionUrl);
            
            String SQLString = null;
            
            SQLString = "INSERT INTO G04_SERVICIOXCONTENEDOR(IDCONTENEDOR, IDSERVICIO)"
                        + "VALUES(?,?)";
            
            pstmt = conn.prepareStatement(SQLString);
            pstmt.setString(1,Integer.toString(idCont) );
            pstmt.setString(2,Integer.toString(idServ) );
       
            
            result =  pstmt.executeUpdate();
            
            if (result == 0){
                throw new Exception();
            }            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
             //5. Se cierra la conexión
             try {if (rs != null) rs.close(); } 
             catch(Exception e){e.printStackTrace();}  
        }
        
        return result;
    }

    @Override
    public ArrayList<Servicio> queryAllServxCont(int id) {
        
        ArrayList<Servicio> serviciosList = new ArrayList<Servicio>();
        Connection conn = null;
            PreparedStatement pstmt = null;
            PreparedStatement pstmt2=null;
            PreparedStatement pstmt3=null;
            ResultSet rs = null;
            ResultSet rs2=null;
            ResultSet rs3=null;
        
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+"databaseName=inf282;user=inf282;password=inf282db;";
                conn = DriverManager.getConnection(connectionUrl);
                pstmt = conn.prepareStatement("SELECT s.IDSERVICIO,s.DESCRIPCION,s.PRECIO_BASE,s.UNIDAD_COBRO"
                                             +" FROM G04_SERVICIO s ,G04_SERVICIOXCONTENEDOR sxc "
                                             +" WHERE  sxc.IDCONTENEDOR="+id+" AND s.IDSERVICIO=sxc.IDSERVICIO");
                rs =  pstmt.executeQuery();
                
                while (rs.next()){
                int idserv = rs.getInt("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                Servicio s = new Servicio(idserv,descripcion,pbase,unidad);
                serviciosList.add(s);
            }
            
        }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                 //5. Se cierra la conexión
                try {if (rs != null) rs.close(); }
                 catch(Exception e){
                     e.printStackTrace();
                 }
            }
        
        return serviciosList;
    }

    @Override
    public ArrayList<Servicio> queryAllSerxDoc(int idDoc) {
        ArrayList<Servicio> serviciosList = new ArrayList<Servicio>();
        Connection conn = null;
            PreparedStatement pstmt = null;
            PreparedStatement pstmt2=null;
            PreparedStatement pstmt3=null;
            ResultSet rs = null;
            ResultSet rs2=null;
            ResultSet rs3=null;
        
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                String connectionUrl = "jdbc:sqlserver://inti.lab.inf.pucp.edu.pe:1433;"+"databaseName=inf282;user=inf282;password=inf282db;";
                conn = DriverManager.getConnection(connectionUrl);
                pstmt = conn.prepareStatement("SELECT s.IDSERVICIO,s.DESCRIPCION,s.PRECIO_BASE,s.UNIDAD_COBRO"
                                             +" FROM G04_SERVICIO s ,G04_SERVICIOXDOCUMENTO sxd "
                                             +" WHERE  sxd.IDDOCUMENTO" + "="+idDoc+" AND s.IDDOCUMENTO=sxc.IDDOCUMENTO");
                rs =  pstmt.executeQuery();
                
                while (rs.next()){
                int idserv = rs.getInt("IDSERVICIO");
                String descripcion = rs.getString("DESCRIPCION");
                float pbase = rs.getFloat("PRECIO_BASE");
                String unidad = rs.getString("UNIDAD_COBRO");
                
                Servicio s = new Servicio(idserv,descripcion,pbase,unidad);
                serviciosList.add(s);
            }
            
        }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                 //5. Se cierra la conexión
                try {if (rs != null) rs.close(); }
                 catch(Exception e){
                     e.printStackTrace();
                 }
            }
        
        return serviciosList;
    }
    
    
    

}
    
    
